// 日期格式化
export function parseTime(time, pattern) {
  if (arguments.length === 0 || !time) {
    return null;
  }
  const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
  let date;
  if (typeof time === "object") {
    date = time;
  } else {
    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
      time = parseInt(time);
    } else if (typeof time === "string") {
      time = time
        .replace(new RegExp(/-/gm), "/")
        .replace("T", " ")
        .replace(new RegExp(/\.[\d]{3}/gm), "");
    }
    if (typeof time === "number" && time.toString().length === 10) {
      time = time * 1000;
    }
    date = new Date(time);
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay(),
  };
  return format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key];
    // Note: getDay() returns 0 on Sunday
    if (key === "a") {
      return ["日", "一", "二", "三", "四", "五", "六"][value];
    }
    if (result.length > 0 && value < 10) {
      value = "0" + value;
    }
    return value || 0;
  });
}

/**
 * 添加日期范围
 * @param params
 * @param dateRange
 * @param propName
 */
export const addDateRange = (params, dateRange, propName) => {
  const search = params;
  search.params =
    typeof search.params === "object" && search.params !== null && !Array.isArray(search.params) ? search.params : {};
  dateRange = Array.isArray(dateRange) ? dateRange : [];
  if (typeof propName === "undefined") {
    search.params["beginTime"] = dateRange[0];
    search.params["endTime"] = dateRange[1];
  } else {
    search.params["begin" + propName] = dateRange[0];
    search.params["end" + propName] = dateRange[1];
  }
  return search;
};

// 回显数据字典
export const selectDictLabel = (datas, value) => {
  if (value === undefined) {
    return "";
  }
  const actions = [];
  Object.keys(datas).some((key) => {
    if (datas[key].value == "" + value) {
      actions.push(datas[key].label);
      return true;
    }
  });
  if (actions.length === 0) {
    actions.push(value);
  }
  return actions.join("");
};

// 回显数据字典（字符串数组）
export const selectDictLabels = (datas, value, separator) => {
  if (value === undefined || value.length === 0) {
    return "";
  }
  if (Array.isArray(value)) {
    value = value.join(",");
  }
  const actions = [];
  const currentSeparator = undefined === separator ? "," : separator;
  const temp = value.split(currentSeparator);
  Object.keys(value.split(currentSeparator)).some((val) => {
    let match = false;
    Object.keys(datas).some((key) => {
      if (datas[key].value == "" + temp[val]) {
        actions.push(datas[key].label + currentSeparator);
        match = true;
      }
    });
    if (!match) {
      actions.push(temp[val] + currentSeparator);
    }
  });
  return actions.join("").substring(0, actions.join("").length - 1);
};

// 字符串格式化(%s )
export function sprintf(str) {
  if (arguments.length !== 0) {
    let flag = true,
      i = 1;
    str = str.replace(/%s/g, function () {
      // eslint-disable-next-line prefer-rest-params
      const arg = arguments[i++];
      if (typeof arg === "undefined") {
        flag = false;
        return "";
      }
      return arg;
    });
    return flag ? str : "";
  }
}

// 转换字符串，undefined,null等转化为""
export const parseStrEmpty = (str) => {
  if (!str || str == "undefined" || str == "null") {
    return "";
  }
  return str;
};

// 数据合并
export const mergeRecursive = (source, target) => {
  for (const p in target) {
    try {
      if (target[p].constructor == Object) {
        source[p] = mergeRecursive(source[p], target[p]);
      } else {
        source[p] = target[p];
      }
    } catch (e) {
      source[p] = target[p];
    }
  }
  return source;
};

/**
 * 参数处理
 * @param {*} params  参数
 */
export const tansParams = (params) => {
  let result = "";
  for (const propName of Object.keys(params)) {
    const value = params[propName];
    const part = encodeURIComponent(propName) + "=";
    if (value !== null && value !== "" && typeof value !== "undefined") {
      if (typeof value === "object") {
        for (const key of Object.keys(value)) {
          if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") {
            const params = propName + "[" + key + "]";
            const subPart = encodeURIComponent(params) + "=";
            result += subPart + encodeURIComponent(value[key]) + "&";
          }
        }
      } else {
        result += part + encodeURIComponent(value) + "&";
      }
    }
  }
  return result;
};

// 返回项目路径
export const getNormalPath = (p) => {
  if (p.length === 0 || !p || p === "undefined") {
    return p;
  }
  const res = p.replace("//", "/");
  if (res[res.length - 1] === "/") {
    return res.slice(0, res.length - 1);
  }
  return res;
};

// 验证是否为blob格式
export const blobValidate = (data) => {
  return data.type !== "application/json";
};

/** 获取当前时间 */
export function getCurrTime() {
  const currentDate = new Date();
  // 获取年、月、日、小时、分钟和秒
  const year = currentDate.getFullYear();
  const month = (currentDate.getMonth() + 1).toString().padStart(2, "0"); // 月份从0开始，所以要加1，并补零
  const day = currentDate.getDate().toString().padStart(2, "0"); // 补零
  const hours = currentDate.getHours().toString().padStart(2, "0"); // 补零
  const minutes = currentDate.getMinutes().toString().padStart(2, "0"); // 补零
  const seconds = currentDate.getSeconds().toString().padStart(2, "0"); // 补零
  return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}

/** 禁止输入框负数 */
export const noNegative = {
  mounted(el) {
    // 获取真实的 input 元素
    const inputEl = el.querySelector('input');
  
    if (inputEl) {
      // 输入时检测负数，并保留有效的数字部分
      inputEl.addEventListener('input', function () {
        let inputValue = parseFloat(inputEl.value);
  
        if (inputValue < 0) {
          inputEl.value = "0"; // 如果输入负数，将值设为0
        }
      });
  
      // 失去焦点时格式化为两位小数
      inputEl.addEventListener('blur', function () {
        let inputValue = parseFloat(inputEl.value);
        if (!isNaN(inputValue)) {
          inputEl.value = inputValue.toFixed(2); // 失去焦点时保留两位小数
        } else {
          inputEl.value = "0.00"; // 空输入时显示0.00
        }
      });
    }
  }
  
  
};
